﻿using System;
using System.Collections.Generic;
using System.Text;
using IBatisNet.DataMapper;
using CeA.Reports.Atendimento.DataAccess;
using CeA.Reports.Atendimento.DataAccess.Criteria;
using CeA.Reports.Atendimento.DataAccess.DAO.Oracle;
using CeA.Reports.Atendimento.DataAccess.DTO;
using CeA.Reports.Atendimento.DataAccess.DAO;
using CeA.Reports.Atendimento.DataAccess.Model;
using System.Data;

namespace DataAccess {
    class Program {
        static void Main(string[] args) {

            Console.WriteLine(DateTime.Now.ToString("yyyyMM"));

            //tempoMedioAtendimento();
            //tempoNacionalAtendimento();
            Console.WriteLine("teste");

            //PesquisarRfs();
            //GravarRfs();
            // ExcluirRfs();


            //PesquisarRegiao();
            //GravarRegiao();
            //ExcluirRegiao(23);

            //PesquisarLoja();
            //GravarLoja();
            //ExcluirLoja(61);

            //PesquisaEspecialista();
            //GravarEspecialista();
            //ExcluirEspecialist(21);

            //PesquisaRelatorioEspecialista();
            //detalharLoja();

            //PesquisarDia();

            //PesquisarHora();

            // CarregarEstatistica();

            //PesquisarPlanejamento();

            //PesquisarServico();
            //PesquisarRelatorioServico();

            Console.Read();

        }

        //private static void PesquisarRelatorioServico()
        //{
        //    DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            
        //    RelatorioServico daoRelatorio = factory.GetRelatorioServicoDAO();
        //    RelatorioServicoFilter criteriaFiltro = new RelatorioServicoFilter();
        //    criteriaFiltro.DataIncidencia = Convert.ToDateTime("2010-09-10 00:00:00");
        //    criteriaFiltro.addLoja(81);
        //    criteriaFiltro.addLoja(82);
        //    criteriaFiltro.addLoja(83);
        //    criteriaFiltro.addLoja(84);
        //    criteriaFiltro.addLoja(85);

        //    criteriaFiltro.addServicoIdList(2000);
        //    criteriaFiltro.addServicoIdList(2001);
            
        //    Console.WriteLine("Seleção com DAO");
        //    RelatorioServicoDTO serv = daoRelatorio.FindRelatorioServicoBy(criteriaFiltro);
        //    DataTable table = serv.TableRelatorio;
            
        //    foreach (DataRow row in table.Rows)
        //    {
        //        foreach (DataColumn column in table.Columns)
        //        {
        //            Console.WriteLine(String.Format("{0} = {1}",
        //               column.ColumnName, row[column]));
        //        }
        //    }

        //    Console.Read();
        //}

        private static void PesquisarServico()
        {
            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            Servico daoServico = factory.GetServicoDAO();

            ServicoCriteria criteria = new ServicoCriteria();
            criteria.Id = 1;

            Console.WriteLine("Pesquisa por lista de Servico");
            IList<ServicoDTO> list1 = daoServico.ListarIdentificacao();
            foreach (ServicoDTO row in list1)
            {
                Console.WriteLine(row.ToString());

            }

            Console.WriteLine("Fim consulta da lista de Servico");
            Console.Read();
        }

        private static void PesquisaRelatorioEspecialista() {



            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            RelatorioTempoAtendimento daoRelatorio = factory.GetRelatorioTempoEsperaDAO();
            TempoAtendimentoFilter criteriaFiltro = new TempoAtendimentoFilter();
            criteriaFiltro.TempoAtendimento = 40;
            criteriaFiltro.addEspecialista(2);

            criteriaFiltro.addLoja(50);
            criteriaFiltro.addLoja(47);
            criteriaFiltro.addLoja(56);
            criteriaFiltro.addLoja(53);
            criteriaFiltro.DataInicial = Convert.ToDateTime("2009-01-01 00:00:00");
            criteriaFiltro.DataFinal = Convert.ToDateTime("2010-12-31 23:00:00");

            Console.WriteLine("Seleção com DAO");
            IList<TempoAtendimentoEspecialista> list1 = daoRelatorio.FindTempoAtendimentoEspecialista(criteriaFiltro);
            foreach (TempoAtendimentoEspecialista row in list1) {
                Console.WriteLine(row.ToString());
            }
            Console.WriteLine("Seleção com DAO FIM");
            Console.Read();


        }



        private static void ExcluirEspecialist(int p) {
            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            Especialista daoEspecialista = factory.GetEspecialistaDAO();
            daoEspecialista.Excluir(p);
            Console.WriteLine("Excluido item " + p);
            Console.Read();
        }

        private static void GravarEspecialista() {

            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            Especialista daoEspecialista = factory.GetEspecialistaDAO();

            EspecialistaDTO novoEspecialista = new EspecialistaDTO();
            novoEspecialista.Nome = "Luciano";
            novoEspecialista.Sigla = "LM";
            novoEspecialista.NomeUsuario = "Martins";
            novoEspecialista.IdUsuario = 1;
            novoEspecialista.TrilhaAuditoria.IdUsuarioInclusao = 1;


            daoEspecialista.Salvar(novoEspecialista);
            Console.WriteLine("novoEspecialista Gravado " + novoEspecialista.ToString());
            novoEspecialista.Nome = "UPNomeBom2";
            daoEspecialista.Atualizar(novoEspecialista);
            Console.Read();
        }

        private static void PesquisaEspecialista() {
            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            Especialista daoEspecialista = factory.GetEspecialistaDAO();

            EspecialistaCriteria criteria = new EspecialistaCriteria();
            //criteria.addEspecialista(1);

            IList<EspecialistaDTO> list2 = daoEspecialista.ListarIdentificacao(criteria);
            foreach (EspecialistaDTO row in list2) {
                Console.WriteLine(row.ToString());
            }
            Console.WriteLine("Pesquisa por Nome");
            EspecialistaCriteria criteria2 = new EspecialistaCriteria();
            criteria2.Nome = "2";
            IList<EspecialistaDTO> list3 = daoEspecialista.ListarIdentificacao(criteria2);
            foreach (EspecialistaDTO row in list3) {
                Console.WriteLine(row.ToString());
            }

            Console.WriteLine("Pesquisa por Sigla");
            EspecialistaCriteria criteria3 = new EspecialistaCriteria();
            criteria3.Sigla = "P2";
            IList<EspecialistaDTO> list4 = daoEspecialista.ListarIdentificacao(criteria3);
            foreach (EspecialistaDTO row in list4) {
                Console.WriteLine(row.ToString());
            }

            Console.WriteLine("Pesquisa por Usuario");
            EspecialistaCriteria criteria4 = new EspecialistaCriteria();
            criteria4.NomeUsuario = "3";
            IList<EspecialistaDTO> list5 = daoEspecialista.ListarIdentificacao(criteria4);
            foreach (EspecialistaDTO row in list5) {
                Console.WriteLine(row.ToString());
            }
            Console.WriteLine("FIM");
            Console.Read();
        }

        private static void ExcluirLoja(int p) {
            Console.WriteLine("Inicio exclusao item " + p);
            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            Loja daoLoja = factory.GetLojaDAO();
            daoLoja.Excluir(p, 1009);
            Console.WriteLine("Excluido item " + p);

        }

        private static void GravarLoja() {
            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            Loja daoLoja = factory.GetLojaDAO();

            LojaDTO novaLoja = new LojaDTO();
            novaLoja.Nome = "Nova LojaX";
            novaLoja.Sigla = "NovaLX";
            novaLoja.Rfs.Id = 1;
            novaLoja.Regiao.Id = 2;
            novaLoja.Especialista.Id = 1;


            daoLoja.Salvar(novaLoja);
            Console.WriteLine("novaLoja Gravado " + novaLoja.ToString());
            novaLoja.Nome = "UPNomeBom2";
            daoLoja.Atualizar(novaLoja);
            Console.WriteLine("Atualizado" + novaLoja.ToString());
            Console.Read();
        }

        private static void PesquisarLoja() {
            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            Loja daoLoja = factory.GetLojaDAO();
            LojaCriteria criteria = new LojaCriteria();
            criteria.addRfs(1);
            Console.WriteLine("Seleção Simples");
            IList<IdentificacaoLojaDTO> list1 = daoLoja.ListarIdentificacao(criteria);
            foreach (IdentificacaoLojaDTO row in list1) {
                Console.WriteLine(row.ToString());
            }

            Console.WriteLine("Seleção Completa");
            IList<LojaDTO> list2 = daoLoja.Listar(criteria);
            foreach (LojaDTO row in list2) {
                Console.WriteLine(row.ToString());
            }

            Console.WriteLine("Selecao por Nome");
            LojaCriteria criteria2 = new LojaCriteria();
            criteria2.Nome = "IT";
            IList<LojaDTO> list3 = daoLoja.Listar(criteria2);
            foreach (LojaDTO row in list3) {
                Console.WriteLine(row.ToString());
            }

            Console.WriteLine("Selecao por Sigla");
            LojaCriteria criteria3 = new LojaCriteria();
            criteria3.Sigla = "TL";
            IList<LojaDTO> list4 = daoLoja.Listar(criteria3);
            foreach (LojaDTO row in list4) {
                Console.WriteLine(row.ToString());
            }

            Console.WriteLine("Selecao por Uf");
            LojaCriteria criteria4 = new LojaCriteria();
            criteria4.Uf = "SP";
            IList<LojaDTO> list5 = daoLoja.Listar(criteria4);
            foreach (LojaDTO row in list5) {
                Console.WriteLine(row.ToString());
            }
            Console.WriteLine("Selecao por Cidade");
            LojaCriteria criteria5 = new LojaCriteria();
            criteria5.Cidade = "MOC";
            IList<LojaDTO> list6 = daoLoja.Listar(criteria5);
            foreach (LojaDTO row in list6) {
                Console.WriteLine(row.ToString());
            }
            Console.WriteLine("FIM");
            Console.Read();
        }

        private static void ExcluirRegiao(int Id) {
            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            Regiao daoRegiao = factory.GetRegiaoDAO();
            daoRegiao.Excluir(Id);
            Console.WriteLine("Excluido item " + Id);
            Console.Read();
        }

        private static void GravarRegiao() {

            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            Regiao daoRegiao = factory.GetRegiaoDAO();

            RegiaoDTO novaRegiao = new RegiaoDTO();
            novaRegiao.Nome = "Regiano Nova";
            novaRegiao.Rfs.Id = 1;
            novaRegiao.Sigla = "RegNova";
            novaRegiao.TrilhaAuditoria.IdUsuarioInclusao = 1;

            daoRegiao.Salvar(novaRegiao);
            Console.WriteLine("novaRegiao Gravado " + novaRegiao.ToString());
            novaRegiao.Nome = "UPNomeBom2";
            daoRegiao.Atualizar(novaRegiao);
            Console.Read();
        }



        private static void ExcluirRfs() {
            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            Rfs daoRfs = factory.GetRfsDAO();

            try {
                daoRfs.Excluir(1);
            }
            catch (Exception e) {
                Console.WriteLine(e.Message);
            }
            Console.WriteLine("Excluido 1");
            Console.Read();
        }

        private static void GravarRfs() {
            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            Rfs daoRfs = factory.GetRfsDAO();

            RfsDTO novoRfs = new RfsDTO();
            novoRfs.Nome = "RNovo";
            novoRfs.Descricao = "NoDes";

            daoRfs.Salvar(novoRfs);
            Console.WriteLine("Gravado ");
        }

        private static void PesquisarRfs() {
            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            Rfs daoRfs = factory.GetRfsDAO();
            RfsCriteria criteria = new RfsCriteria();
            criteria.addRfs(1);
            Console.WriteLine("Pesquisa pelo IdRFS");
            IList<RfsDTO> list1 = daoRfs.ListarIdentificacao(criteria);
            foreach (RfsDTO row in list1) {
                Console.WriteLine(row.Nome);
            }

            Console.WriteLine("Pesquisa pelo Nome");
            RfsCriteria criteria2 = new RfsCriteria();

            criteria2.Nome = "R";
            IList<RfsDTO> list2 = daoRfs.ListarIdentificacao(criteria2);
            foreach (RfsDTO row in list2) {
                Console.WriteLine(row.Nome);
            }
            Console.WriteLine("Lista acima");
            Console.Read();
        }

        private static void PesquisarRegiao() {
            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            Regiao daoRegiao = factory.GetRegiaoDAO();

            RegiaoCriteria criteria = new RegiaoCriteria();
            criteria.addRfs(1);
            criteria.addRegiao(2);
            criteria.addRegiao(3);
            criteria.addRegiao(1);
            Console.WriteLine("Pesquisa por lista de rfsId");
            IList<RegiaoDTO> list1 = daoRegiao.ListarIdentificacao(criteria);
            foreach (RegiaoDTO row in list1) {
                Console.WriteLine(row.ToString());
            }

            Console.WriteLine("Pesquisa por Nome de Regiao");
            RegiaoCriteria criteria2 = new RegiaoCriteria();
            criteria2.Nome = "R";
            IList<RegiaoDTO> list2 = daoRegiao.ListarIdentificacao(criteria2);
            foreach (RegiaoDTO row in list2) {
                Console.WriteLine(row.ToString());
            }

            Console.WriteLine("Pesquisa por Sigla Regiao");
            RegiaoCriteria criteria3 = new RegiaoCriteria();
            criteria2.Sigla = "S";
            IList<RegiaoDTO> list3 = daoRegiao.ListarIdentificacao(criteria3);
            foreach (RegiaoDTO row in list3) {
                Console.WriteLine(row.ToString());
            }
            Console.WriteLine("Fim consulta");
            Console.Read();
        }

        static void tempoMedioAtendimento() {
            TempoAtendimentoFilter filtro = new TempoAtendimentoFilter();
            filtro.TempoAtendimento = int.MinValue;
            filtro.addRfs(2);// .addRegiao(11).addRegiao(10).addRegiao(1);

            IList<TempoAtendimento> list = Mapper.Instance()
                .QueryForList<TempoAtendimento>("tempoMedioAtendimento", filtro);

            foreach (TempoAtendimento row in list) {
                Console.WriteLine(row.ToString());
            }

            Console.Read();
        }


        static void tempoNacionalAtendimento() {
            TempoAtendimentoFilter filtro = new TempoAtendimentoFilter();
            filtro.TempoAtendimento = 40;

            IList<TempoAtendimento> list = Mapper.Instance()
                .QueryForList<TempoAtendimento>("tempoNacionalAtendimento", filtro);

            foreach (TempoAtendimento row in list) {
                Console.WriteLine(row.ToString());
            }

            Console.Read();
        }


        static void detalharLoja() {
            OracleLojaImpl dao = new OracleLojaImpl();
            LojaDTO dto = dao.Recuperar(57);
            Console.WriteLine(dto.ToString());
        }


        private static void PesquisarDia()
        {
            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            Dia daoDia = factory.GetDiaDAO();

            DiaCriteria criteria = new DiaCriteria();
            criteria.Ano = 2010;
            criteria.Mes = 9;
            
            Console.WriteLine("Pesquisa por lista de dias");
            IList<DiaDTO> list1 = daoDia.ListarIdentificacao(criteria);
            foreach (DiaDTO row in list1)
            {
                //row.Dia_Tipo = "V";
                daoDia.Atualizar(row);    
                Console.WriteLine(row.ToString());
                
            }
                        
            Console.WriteLine("Fim consulta do calendario de dia");
            Console.Read();
        }

        private static void PesquisarHora()
        {
            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            Hora daoHora = factory.GetHoraDAO();

            HoraCriteria criteria = new HoraCriteria();
            criteria.HoraInicio = new DateTime(2009, 8, 30, 8, 0, 0);
            criteria.HoraFim = new DateTime(2009, 8, 30, 23, 0, 0);

            Console.WriteLine("Pesquisa por lista de horas");
            IList<HoraDTO> list1 = daoHora.ListarIdentificacao();
            foreach (HoraDTO row in list1)
            {
                Console.WriteLine(row.ToString());

            }

            Console.WriteLine("Fim consulta da lista de horarios");
            Console.Read();
        }

        
        static void PesquisarPlanejamento()
        {
            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            Planejamento daoPlanejamento = factory.GetPlanejamentoDAO();

            PlanejamentoCriteria criteria = new PlanejamentoCriteria();
            criteria.Ano = 2009;
            criteria.Mes = 9;
            criteria.LojaId = 48;
            
            Console.WriteLine("Pesquisa por lista de planejamento");
            IList<PlanejamentoDTO> list1 = daoPlanejamento.ListarIdentificacao(criteria);
            foreach (PlanejamentoDTO row in list1)
            {
                Console.WriteLine(row.ToString());

            }
            
            Console.WriteLine("Fim consulta da lista de horarios");
            Console.Read();
        }

        static void CarregarEstatistica() {
            DAOFactory factory = DAOFactory.GetDAOFactory(DAOFactoryType.ORACLE);
            Planejamento daoPlanejamento = factory.GetPlanejamentoDAO();

            PlanejamentoCriteria criteria = new PlanejamentoCriteria();
            criteria.Ano = 2009;
            criteria.Mes = 9;
            criteria.LojaId = 48;
            criteria.QmaticBranchno = 1009;
            DateTime d1 = DateTime.Now;


            Console.WriteLine("Incio CarregarEstatistica planejamento " + d1.ToString());
            daoPlanejamento.CarregarEstatistica(criteria);
            DateTime d2 = DateTime.Now;
            Console.WriteLine("Fim CarregarEstatistica planejamento" + d2.ToString());
            Console.Read();
        }



    }
}
